Move xenstore page before page tables so that guest doesn't free it after boot
authorsmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Wed, 6 Jul 2005 15:36:57 +0000 (15:36 +0000)
committersmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Wed, 6 Jul 2005 15:36:57 +0000 (15:36 +0000)
Signed-off-by: Steven Hand <steven@xensource.com>
tools/libxc/xc_linux_build.c

index 838efe1913ea9d318d41307f712f521a4dbc38d8..03839eded8abaf44dbd5e786e1865f5d2e1a370c 100644 (file)
@@ -129,16 +129,16 @@ static int setup_guest(int xc_handle,
     vinitrd_end      = vinitrd_start + initrd_len;
     vphysmap_start   = round_pgup(vinitrd_end);
     vphysmap_end     = vphysmap_start + (nr_pages * sizeof(unsigned long));
-    vpt_start        = round_pgup(vphysmap_end);
+    vstoreinfo_start = round_pgup(vphysmap_end);
+    vstoreinfo_end   = vstoreinfo_start + PAGE_SIZE;
+    vpt_start        = vstoreinfo_end; 
+
     for ( nr_pt_pages = 2; ; nr_pt_pages++ )
     {
         vpt_end          = vpt_start + (nr_pt_pages * PAGE_SIZE);
         vstartinfo_start = vpt_end;
         vstartinfo_end   = vstartinfo_start + PAGE_SIZE;
-        /* Place store shared page after startinfo. */
-        vstoreinfo_start = vstartinfo_end;
-        vstoreinfo_end   = vstartinfo_end + PAGE_SIZE;
-        vstack_start     = vstoreinfo_end;
+        vstack_start     = vstartinfo_end;
         vstack_end       = vstack_start + PAGE_SIZE;
         v_end            = (vstack_end + (1UL<<22)-1) & ~((1UL<<22)-1);
         if ( (v_end - vstack_end) < (512UL << 10) )
@@ -167,17 +167,17 @@ static int setup_guest(int xc_handle,
            " Loaded kernel: %p->%p\n"
            " Init. ramdisk: %p->%p\n"
            " Phys-Mach map: %p->%p\n"
+           " Store page:    %p->%p\n"
            " Page tables:   %p->%p\n"
            " Start info:    %p->%p\n"
-           " Store page:    %p->%p\n"
            " Boot stack:    %p->%p\n"
            " TOTAL:         %p->%p\n",
            _p(dsi.v_kernstart), _p(dsi.v_kernend), 
            _p(vinitrd_start), _p(vinitrd_end),
            _p(vphysmap_start), _p(vphysmap_end),
+           _p(vstoreinfo_start), _p(vstoreinfo_end),
            _p(vpt_start), _p(vpt_end),
            _p(vstartinfo_start), _p(vstartinfo_end),
-           _p(vstoreinfo_start), _p(vstoreinfo_end),
            _p(vstack_start), _p(vstack_end),
            _p(dsi.v_start), _p(v_end));
     printf(" ENTRY ADDRESS: %p\n", _p(dsi.v_kernentry));